package 竞赛.周赛215;

import java.util.Arrays;
import java.util.HashMap;

/**
 * @author admin
 * @version 1.0.0
 * @ClassName 第二题.java
 * @Description TODO
 * @createTime 2020年11月15日 10:32:00
 * 如果可以使用以下操作从一个字符串得到另一个字符串，则认为两个字符串 接近 ：
 *
 * 操作 1：交换任意两个 现有 字符。
 * 例如，abcde -> aecdb
 * 操作 2：将一个 现有 字符的每次出现转换为另一个 现有 字符，并对另一个字符执行相同的操作。
 * 例如，aacabb -> bbcbaa（所有 a 转化为 b ，而所有的 b 转换为 a ）
 * 你可以根据需要对任意一个字符串多次使用这两种操作。
 *
 * 给你两个字符串，word1 和 word2 。如果 word1 和 word2 接近 ，就返回 true ；否则，返回 false 。
 * 输入：word1 = "abc", word2 = "bca"
 * 输出：true
 * 解释：2 次操作从 word1 获得 word2 。
 * 执行操作 1："abc" -> "acb"
 * 执行操作 1："acb" -> "bca"
 * 示例 2：
 *
 * 输入：word1 = "a", word2 = "aa"
 * 输出：false
 * 解释：不管执行多少次操作，都无法从 word1 得到 word2 ，反之亦然。
 * 示例 3：
 *
 * 输入：word1 = "cabbba", word2 = "abbccc"
 * 输出：true
 * 解释：3 次操作从 word1 获得 word2 。
 * 执行操作 1："cabbba" -> "caabbb"
 * 执行操作 2："caabbb" -> "baaccc"
 * 执行操作 2："baaccc" -> "abbccc"
 * 示例 4：
 *
 * 输入：word1 = "cabbba", word2 = "aabbss"
 * 输出：false
 * 解释：不管执行多少次操作，都无法从 word1 得到 word2 ，反之亦然。
 *
 * 开心 一遍过
 */
public class 第二题 {
    public static void main(String[] args) {
        Solution solution=new Solution();
        boolean b = solution.closeStrings("cabbba", "aabbss");
        System.out.println(b);
    }
    static class Solution {
        public boolean closeStrings(String word1, String word2) {
            if(word1.length()!=word2.length()){
                return false;
            }

           int[] list=new int[26];
            for(int i=0;i<word1.length();i++){
                list[word1.charAt(i)-'a']++;
            }

            int[] temp=new int[26];
            for(int i=0;i<word2.length();i++ ){
                temp[word2.charAt(i)-'a']++;
            }

            for(int i=0;i<26;i++){
                if (list[i]==0&&temp[i]!=0){
                    return false;
                }
                if(list[i]!=0&&temp[i]==0){
                    return  false;
                }
            }
            Arrays.sort(list);
            Arrays.sort(temp);
            if(Arrays.equals(list,temp)){
                return true;
            }
            return false;
        }
    }
}
